wasm使って遊ぶ


概要

UnityでWebAssemblyを使って遊ぶ



wasmって何

https://blogs.unity3d.com/jp/2015/06/18/webgl-webassembly-and-feature-roadmap/


https://github.com/WebAssembly/design/blob/master/FAQ.md

JSを置き換えるもの? -> No。

、、、って言ってるけど、

まあ、JavaScriptのライブラリとかを作り上げるためのバイナリ、みたいな感じ。


何ができるようになるの?



実行面

・高速な読み込み

DLが終わってからのブラウザの読み込みが高速。

jsの倍くらい。

実行速度は一緒。


・軽量

jsそれ自体よりもサイズが小さくなる。3/4 ~ 1/2程度。

つまりjsより高速にDLされる。



制作面

・ライブラリ配布に適している

いままでのjsが手に入れられなかった「JSでは無い、jsで使えるオフィシャルな資産」

・コンパイルできるようになる

コンパイラを通すので、jsでありながら、事前にコンパイルができるようになる。

これはwasmの機能っていうよりは、開発環境の話。


まとめると、

jsの3/4程度のサイズ -> DLが1.2倍くらい高速

jsより倍くらい早い読み込み -> 2倍くらい高速なロード時間



実践WebAssembly with Unity5.5(beta7)

コンパイル

スクリーンショット 2016-10-17 18.29.16.png

スクリーンショット 2016-10-17 18.31.18.png



一番下のWebAssembly のチェックを付けるだけ。

付けるだけで、


Unityで作ったコンテンツがブラウザで動くようになる。



簡単なjsとの比較

jsでのUnityのコンテンツ:

2,705,128 byte = 2.7MB。

スクリーンショット 2016-10-17 18.38.53.png


wasmでのUnityのコンテンツ:

1,777,359 byte = 1.8MB。

スクリーンショット 2016-10-17 18.37.55.png

、、、軽い!!!(確信


比較すると、wasmはjsと比べて、65%ほどのサイズになった。



この拡張子(wasmgz)ってなんなの?

gzip圧縮ってのやっててね、ブラウザにDLされると展開されるんだよ。



動かしてみたい、、、動かしてみたくない、、?

こんな感じにサイズが減るぞWebAsm!!


サイズが小さくなってDLが速くなって、読み込みも高速なそんなWebAsm!!


で!?


実際のブラウザで使えんの??



そんなときはこのサイト! 


Can I Use..

http://caniuse.com/#search=was

スクリーンショット 2016-10-17 18.50.10.png


旗がついてるブラウザで使える。

旗がついてるブラウザでメニアックな設定を変えると使える


Safari、iOS Safari、Android Browser ともに全滅。

Firefox、Chrome、Chrome for Androidでは条件付きで動く!


IE、Edgeでは、まだ。

ほか、、、のはまああってもなくても変わらんでしょ。(Operaは買収されて鬼籍に入ったんで考えない


ちなみに、

スクリーンショット 2016-10-17 18.58.35.png


全ブラウザ、正式対応はまだだけど、In Development (開発中) なんだね。


UnityでのWebコンテンツについて

ちょっと毛色を変えて、UnityでWebコンテンツを作ることができるのか?


-> できる。

-> できるのだ。



この記事を書いている人はこんなライブラリを作っています


Unidon

https://github.com/sassembla/Unidon


こいつは、Unityのコンテンツをhtmlページっぽい概念で切り分けて、分割してロードして実行可能にする、っていうやつ。



Unity + WebAsmでビルドしたコンテンツをブラウザで実行してみる

WebAsmに対応してないブラウザの場合:


MacSafari上で動かすとこんな感じにフォールバックが発生して、asm.jsのバージョンのほうが使用される。

スクリーンショット 2016-10-17 19.20.14.png


WebAsmに対応してるブラウザの場合:

ローディングが開始されて表示されるまでが「きもち」短い。



仕上げていくよという感じ。